#ifndef __DAO_CXXSTL_H__
#define __DAO_CXXSTL_H__
#include<stdlib.h>
#include<assert.h>
#include<string.h>
#include<dao.h>

#include"memory"
#include"string"
#include"vector"
#include"map"
#include"stl.h"


#ifndef DAO_CXXSTL_STATIC
#ifndef DAO_DLL_CXXSTL
#define DAO_DLL_CXXSTL DAO_DLL_EXPORT
#endif
#else
#define DAO_DLL_CXXSTL
#endif

extern DaoVmSpace *__daoVmSpace;
#ifdef __cplusplus
extern "C"{
#endif
extern DaoTypeBase *dao__1_anonymous_2__Typer;
extern DaoTypeBase *dao___darwin_pthread_handler_rec_Typer;
extern DaoTypeBase *dao__opaque_pthread_attr_t_Typer;
extern DaoTypeBase *dao__opaque_pthread_cond_t_Typer;
extern DaoTypeBase *dao__opaque_pthread_condattr_t_Typer;
extern DaoTypeBase *dao__opaque_pthread_mutex_t_Typer;
extern DaoTypeBase *dao__opaque_pthread_mutexattr_t_Typer;
extern DaoTypeBase *dao__opaque_pthread_once_t_Typer;
extern DaoTypeBase *dao__opaque_pthread_rwlock_t_Typer;
extern DaoTypeBase *dao__opaque_pthread_rwlockattr_t_Typer;
extern DaoTypeBase *dao__opaque_pthread_t_Typer;
extern DaoTypeBase *dao___darwin_i386_thread_state_Typer;
extern DaoTypeBase *dao___darwin_fp_control_Typer;
extern DaoTypeBase *dao___darwin_fp_status_Typer;
extern DaoTypeBase *dao___darwin_mmst_reg_Typer;
extern DaoTypeBase *dao___darwin_xmm_reg_Typer;
extern DaoTypeBase *dao___darwin_i386_float_state_Typer;
extern DaoTypeBase *dao___darwin_i386_exception_state_Typer;
extern DaoTypeBase *dao___darwin_x86_debug_state32_Typer;
extern DaoTypeBase *dao___darwin_x86_thread_state64_Typer;
extern DaoTypeBase *dao___darwin_x86_float_state64_Typer;
extern DaoTypeBase *dao___darwin_x86_exception_state64_Typer;
extern DaoTypeBase *dao___darwin_x86_debug_state64_Typer;
extern DaoTypeBase *dao___darwin_mcontext32_Typer;
extern DaoTypeBase *dao___darwin_mcontext64_Typer;
extern DaoTypeBase *dao___darwin_sigaltstack_Typer;
extern DaoTypeBase *dao___darwin_ucontext_Typer;
extern DaoTypeBase *dao_sigval_Typer;
extern DaoTypeBase *dao_sigevent_Typer;
extern DaoTypeBase *dao___siginfo_Typer;
extern DaoTypeBase *dao___sigaction_u_Typer;
extern DaoTypeBase *dao___sigaction_Typer;
extern DaoTypeBase *dao_sigaction_Typer;
extern DaoTypeBase *dao_sigvec_Typer;
extern DaoTypeBase *dao_sigstack_Typer;
extern DaoTypeBase *dao_timeval_Typer;
extern DaoTypeBase *dao_rusage_Typer;
extern DaoTypeBase *dao_rlimit_Typer;
extern DaoTypeBase *dao_wait_Typer;
extern DaoTypeBase *dao__1_anonymous_2__Typer;
extern DaoTypeBase *dao__1_anonymous_2__Typer;
extern DaoTypeBase *dao__1_anonymous_2__Typer;
extern DaoTypeBase *dao_lconv_Typer;
extern DaoTypeBase *dao___sbuf_Typer;
extern DaoTypeBase *dao___sFILEX_Typer;
extern DaoTypeBase *dao___sFILE_Typer;
extern DaoTypeBase *dao_timespec_Typer;
extern DaoTypeBase *dao_tm_Typer;
extern DaoTypeBase *dao_accessx_descriptor_Typer;
extern DaoTypeBase *dao__1_anonymous_2__Typer;
extern DaoTypeBase *dao__1_anonymous_2__Typer;
extern DaoTypeBase *dao__1_anonymous_2__Typer;
extern DaoTypeBase *dao__1_anonymous_2__Typer;
extern DaoTypeBase *dao___true_type_Typer;
extern DaoTypeBase *dao___false_type_Typer;
extern DaoTypeBase *dao_Dummy_Typer;
extern DaoTypeBase *dao_StringList_Typer;
extern DaoTypeBase *dao_StringMap_Typer;
#ifdef __cplusplus
}
#endif
__true_type* DAO_DLL_CXXSTL Dao___true_type_New();
__false_type* DAO_DLL_CXXSTL Dao___false_type_New();
Dummy* DAO_DLL_CXXSTL Dao_Dummy_New();
class DAO_DLL_CXXSTL DaoCxxVirt_StringList 
{
	public:
	DaoCxxVirt_StringList(){ self = 0; cdata = 0; }
	void DaoInitWrapper( StringList *self, DaoCData *d );

	StringList *self;
	DaoCData *cdata;



};
class DAO_DLL_CXXSTL DaoCxx_StringList : public StringList, public DaoCxxVirt_StringList
{ 

	public:
	DaoCxx_StringList( const std::allocator<std::basic_string<char> >& __a ) : StringList( __a ){}
	DaoCxx_StringList( StringList::size_type __n, const std::basic_string<char>& __value, const std::allocator<std::basic_string<char> >& __a ) : StringList( __n, __value, __a ){}
	DaoCxx_StringList( StringList::size_type __n ) : StringList( __n ){}
	DaoCxx_StringList( const std::vector<std::basic_string<char>,std::allocator<std::basic_string<char> > >& __x ) : StringList( __x ){}

	~DaoCxx_StringList();
	void DaoInitWrapper();

	void DaoWrap__M_range_check( StringList::size_type __n )const{ StringList::_M_range_check( __n ); }
	void DaoWrap__M_fill_assign( StringList::size_type __n, const std::basic_string<char>& __val ){ StringList::_M_fill_assign( __n, __val ); }

};

DaoCxx_StringList* DAO_DLL_CXXSTL DaoCxx_StringList_New( const std::allocator<std::basic_string<char> >& __a );

DaoCxx_StringList* DAO_DLL_CXXSTL DaoCxx_StringList_New( StringList::size_type __n, const std::basic_string<char>& __value, const std::allocator<std::basic_string<char> >& __a );

DaoCxx_StringList* DAO_DLL_CXXSTL DaoCxx_StringList_New( StringList::size_type __n );

DaoCxx_StringList* DAO_DLL_CXXSTL DaoCxx_StringList_New( const std::vector<std::basic_string<char>,std::allocator<std::basic_string<char> > >& __x );

StringMap* DAO_DLL_CXXSTL Dao_StringMap_New(  );

StringMap* DAO_DLL_CXXSTL Dao_StringMap_New( const std::less<std::basic_string<char> >& __comp, const std::allocator<std::pair<const std::basic_string<char>,std::basic_string<char> > >& __a );

StringMap* DAO_DLL_CXXSTL Dao_StringMap_New( const std::map<std::basic_string<char>,std::basic_string<char>,std::less<std::basic_string<char> >,std::allocator<std::pair<const std::basic_string<char>,std::basic_string<char> > > >& __x );
#ifdef __cplusplus
extern "C"{
#endif
#ifdef __cplusplus
}
#endif
#ifdef __cplusplus
extern "C"{
#endif
#ifdef __cplusplus
}
#endif
#ifdef __cplusplus
extern "C"{
#endif
extern DaoTypeBase *dao_std_0_basic_string_Typer;
extern DaoTypeBase *dao_std_0_string_Typer;
extern DaoTypeBase *dao_std_0_vector_Typer;
extern DaoTypeBase *dao_std_0_map_Typer;
extern DaoTypeBase *dao_std_0_allocator_Typer;
extern DaoTypeBase *dao_std_0_allocator_1_std_0_basic_string_1_char_2__10__2__Typer;
extern DaoTypeBase *dao_std_0_less_Typer;
extern DaoTypeBase *dao_std_0_less_1_std_0_basic_string_1_char_2__10__2__Typer;
extern DaoTypeBase *dao_std_0_allocator_1_std_0_pair_1_const_10_std_0_basic_string_1_char_2__3_std_0_basic_string_1_char_2__10__2__10__2__Typer;
extern DaoTypeBase *dao_std_0_pair_Typer;
extern DaoTypeBase *dao_std_0_pair_1_const_10_std_0_basic_string_1_char_2__3_std_0_basic_string_1_char_2__10__2__Typer;
extern DaoTypeBase *dao_std_0_allocator_1_char_2__Typer;
#ifdef __cplusplus
}
#endif

std::string* DAO_DLL_CXXSTL Dao_std_0_string_New(  );

std::string* DAO_DLL_CXXSTL Dao_std_0_string_New( const std::allocator<char>& __a );

std::string* DAO_DLL_CXXSTL Dao_std_0_string_New( const std::basic_string<char>& __str );

std::string* DAO_DLL_CXXSTL Dao_std_0_string_New( const std::basic_string<char>& __str, std::string::size_type __pos, std::string::size_type __n );

std::string* DAO_DLL_CXXSTL Dao_std_0_string_New( const std::basic_string<char>& __str, std::string::size_type __pos, std::string::size_type __n, const std::allocator<char>& __a );

std::string* DAO_DLL_CXXSTL Dao_std_0_string_New( const char* __s, std::string::size_type __n, const std::allocator<char>& __a );

std::string* DAO_DLL_CXXSTL Dao_std_0_string_New( const char* __s, const std::allocator<char>& __a );

std::string* DAO_DLL_CXXSTL Dao_std_0_string_New( std::string::size_type __n, char __c, const std::allocator<char>& __a );

class std::allocator<class std::basic_string<char> >* DAO_DLL_CXXSTL Dao_std_0_allocator_1_std_0_basic_string_1_char_2__10__2__New(  );

class std::allocator<class std::basic_string<char> >* DAO_DLL_CXXSTL Dao_std_0_allocator_1_std_0_basic_string_1_char_2__10__2__New( const std::allocator<std::basic_string<char> >& __a );
std::less<std::basic_string<char> >* DAO_DLL_CXXSTL Dao_std_0_less_1_std_0_basic_string_1_char_2__10__2__New();

class std::allocator<struct std::pair<const class std::basic_string<char>, class std::basic_string<char> > >* DAO_DLL_CXXSTL Dao_std_0_allocator_1_std_0_pair_1_const_10_std_0_basic_string_1_char_2__3_std_0_basic_string_1_char_2__10__2__10__2__New(  );

class std::allocator<struct std::pair<const class std::basic_string<char>, class std::basic_string<char> > >* DAO_DLL_CXXSTL Dao_std_0_allocator_1_std_0_pair_1_const_10_std_0_basic_string_1_char_2__3_std_0_basic_string_1_char_2__10__2__10__2__New( const std::allocator<std::pair<const std::basic_string<char>,std::basic_string<char> > >& __a );

std::allocator<char>* DAO_DLL_CXXSTL Dao_std_0_allocator_1_char_2__New(  );

std::allocator<char>* DAO_DLL_CXXSTL Dao_std_0_allocator_1_char_2__New( const std::allocator<char>& __a );
#ifdef __cplusplus
extern "C"{
#endif
#ifdef __cplusplus
}
#endif
#ifdef __cplusplus
extern "C"{
#endif
#ifdef __cplusplus
}
#endif
#ifdef __cplusplus
extern "C"{
#endif
#ifdef __cplusplus
}
#endif
#endif
